{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "46f7ebbd-a8c9-4635-bead-bc4f2afc6001",
   "metadata": {},
   "source": [
    "# 机器学习的概念"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4547ef88-80af-4ca7-ac06-4fbe25ed0935",
   "metadata": {},
   "source": [
    "# 作业"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4641292d-46cc-4d3e-8118-36b2560c2b05",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "500"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import random\n",
    "from scipy import stats\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "%matplotlib inline\n",
    "### 数据\n",
    "x = np.random.normal(10,10,(500))\n",
    "y = np.zeros(500)\n",
    "for i in range(len(x)):\n",
    "    noise = np.random.normal()\n",
    "    y[i] = 0.5*x[i] + 0.5+ 2*noise\n",
    "len(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "06960411-d25a-40c2-86f0-d956ce1d77c1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LinearRegression\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ea6b64cc-e739-4537-a675-641be752efc5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "机器学习拟合皮尔逊相关系数为: 0.9727466531224779,斜率为2.035036264135041,截距为-0.8266859045473475\n",
      "线性模型拟合斜率[2.03503626],截距为-0.8266859045473751\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# y = ax + b,  a,b自定\n",
    "# numpy 生成20个值\n",
    "a=2\n",
    "b=1\n",
    "x=np.arange(60)\n",
    "y_data = np.array([a*xi + b for xi in x])\n",
    "noise = np.random.normal(0, 7 ,x.shape)  # 假设噪声服从均值为0，标准差为0.5的正态分布\n",
    "y_noisy = y_data + noise\n",
    "\n",
    "coefficients = np.polyfit(x, y_noisy, 1)  #拟合\n",
    "slope, intercept = coefficients   #截距和斜率\n",
    "\n",
    "# 生成拟合线的y值\n",
    "y_fit = slope * x + intercept\n",
    "\n",
    "# 绘制原始数据点\n",
    "plt.scatter(x, y_noisy, label='Original Data', color='blue')\n",
    "\n",
    "# 绘制拟合线\n",
    "plt.plot(x, y_fit, label='Fitted Line', color='red')\n",
    "\n",
    "#计算皮尔逊系数\n",
    "mean_x = np.mean(x)\n",
    "mean_y = np.mean(y_fit)\n",
    "numerator = np.sum((x - mean_x) * (y_noisy - mean_y))\n",
    "denominator = np.sqrt(np.sum((x - mean_x)**2) * np.sum((y_noisy - mean_y)**2))\n",
    "corr = numerator / denominator\n",
    "\n",
    "print(f\"机器学习拟合皮尔逊相关系数为: {corr},斜率为{slope},截距为{intercept}\")\n",
    "\n",
    "\n",
    "X_train = np.array(x).reshape(-1,1)\n",
    "y_train = np.array(y_noisy)\n",
    "\n",
    "#模型\n",
    "regr = LinearRegression()\n",
    "regr.fit(X_train, y_train)\n",
    "x = np.arange(0, 60, 0.02).reshape(-1, 1)\n",
    "y = regr.predict(x)\n",
    "regr.coef_, regr.intercept_\n",
    "\n",
    "#画图\n",
    "plt.plot(X_train, y_train, '.')\n",
    "plt.plot(x[:, 0], y,label='LinearRegression')\n",
    "print(f\"线性模型拟合斜率{regr.coef_},截距为{regr.intercept_}\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a8f6a86-a5de-406e-ada0-394eb60fedc6",
   "metadata": {},
   "source": [
    "## 复习统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9badd8d1-c5e3-4ed4-b096-ef3712695e64",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyh0lEQVR4nO3dfXRU5YHH8d8k5IWXzMQgmUlWoNEqEF5UQMKorVojCQaO1PiChzdb1D05iVtAKbJHiVFrkLpyShdI9VBgF5GVrWjBEkQQWGEEGqBLACnSaEAyiWuamYBNgOTuHzS3DgHJ5PVO8v2cc4/Mc5878zxzMzM/773Pc22GYRgCAACwkLCObgAAAMDFCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByunV0A5qjvr5ep06dUkxMjGw2W0c3BwAANIFhGKqurlZiYqLCwr77GElIBpRTp06pb9++Hd0MAADQDCdOnNA111zznXVCMqDExMRIutBBu93ewa0BAABN4ff71bdvX/N3/LuEZEBpOK1jt9sJKAAAhJimXJ7BRbIAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByQnKiNgAA0Dbq6g3tKalURXWN4mOiNSopTuFh7X/fu6COoNTV1em5555TUlKSunfvruuuu04vvviiDMMw6xiGoXnz5ikhIUHdu3dXamqqjh07FvA8lZWVmjRpkux2u2JjYzV9+nSdPn26dXoEAACapbC4TLe/slWPvPGJfrbmgB554xPd/spWFRaXtXtbggoor7zyipYuXap///d/15EjR/TKK69owYIF+vWvf23WWbBggRYtWqSCggLt3r1bPXv2VFpammpqasw6kyZN0qFDh7R582Zt2LBBO3bs0BNPPNF6vQIAAEEpLC5T1qp9KvPVBJR7fTXKWrWv3UOKzfj24Y8rGDdunJxOp5YtW2aWZWZmqnv37lq1apUMw1BiYqKeeuopPf3005Ikn88np9OpFStWaOLEiTpy5IiSk5O1d+9ejRw5UpJUWFioe++9VydPnlRiYuIV2+H3++VwOOTz+bgXDwAALVRXb+j2V7Y2CicNbJJcjmh9POdHLTrdE8zvd1BHUG699VZt2bJFf/7znyVJf/rTn/Txxx9r7NixkqSSkhJ5vV6lpqaa2zgcDqWkpMjj8UiSPB6PYmNjzXAiSampqQoLC9Pu3bsv+bq1tbXy+/0BCwAAaB17SiovG04kyZBU5qvRnpLKdmtTUBfJPvPMM/L7/Ro4cKDCw8NVV1enX/ziF5o0aZIkyev1SpKcTmfAdk6n01zn9XoVHx8f2Ihu3RQXF2fWuVh+fr7y8vKCaSoAAGiiiurLh5Pm1GsNQR1Befvtt/Xmm29q9erV2rdvn1auXKlXX31VK1eubKv2SZLmzp0rn89nLidOnGjT1wMAoCuJj4lu1XqtIagjKLNnz9YzzzyjiRMnSpKGDh2qL774Qvn5+Zo2bZpcLpckqby8XAkJCeZ25eXluummmyRJLpdLFRUVAc97/vx5VVZWmttfLCoqSlFRUcE0FQAANNGopDglOKLl9dXoUhemNlyDMioprt3aFNQRlG+++UZhYYGbhIeHq76+XpKUlJQkl8ulLVu2mOv9fr92794tt9stSXK73aqqqlJRUZFZZ+vWraqvr1dKSkqzOwIAAJonPMym3PHJki6EkW9reJw7Prld50MJKqCMHz9ev/jFL/T+++/r888/17p16/Taa6/pxz/+sSTJZrNpxowZeumll/T73/9eBw8e1NSpU5WYmKgJEyZIkgYNGqT09HQ9/vjj2rNnj3bu3KmcnBxNnDixSSN4AABA60sfkqClk4fL5Qg8jeNyRGvp5OFKH5JwmS3bRlDDjKurq/Xcc89p3bp1qqioUGJioh555BHNmzdPkZGRki5M1Jabm6vXX39dVVVVuv3227VkyRLdcMMN5vNUVlYqJydH69evV1hYmDIzM7Vo0SL16tWrSe1gmDEAAG2jLWeSDeb3O6iAYhUEFAAAQk+bzYMCAADQHggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcggoAADAcoIKKN/73vdks9kaLdnZ2ZKkmpoaZWdnq3fv3urVq5cyMzNVXl4e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/v0B9QYPHhyw3z/++OO2aH6LBNv3BkePHg3oW3x8vLmus+73X/3qVwF9PnHihOLi4hp93q2+37dv367s7Gx98skn2rx5s86dO6cxY8bozJkzl91m165deuSRRzR9+nTt379fEyZM0IQJE1RcXGzWaZfveQPGqFGjjOzsbPNxXV2dkZiYaOTn5zdp+/PnzxsxMTHGypUrzbJp06YZ9913X2s3tdUF2/fly5cbDofjss9XX19vuFwu45e//KVZVlVVZURFRRlvvfVWq7W7NbR0vy9cuNCIiYkxTp8+bZaFyn7/NknGunXrvrPOz3/+c2Pw4MEBZQ8//LCRlpZmPm7p+9kRmtL3S0lOTjby8vLMx7m5ucaNN97Yeg1rB03p+0cffWRIMv76179etk5X2e/r1q0zbDab8fnnn5tlobjfKyoqDEnG9u3bL1vnoYceMjIyMgLKUlJSjH/+5382DKP9vue7/BGUs2fPqqioSKmpqWZZWFiYUlNT5fF4mvQc33zzjc6dO6e4uLiA8m3btik+Pl4DBgxQVlaWvv7661Zte0s1t++nT59W//791bdvX9133306dOiQua6kpERerzfgOR0Oh1JSUpr8fraH1tjvy5Yt08SJE9WzZ8+Acqvv9+bweDwB75UkpaWlme9Va7yfoaK+vl7V1dWNPu/Hjh1TYmKirr32Wk2aNEmlpaUd1MLWd9NNNykhIUH33HOPdu7caZZ3pf2+bNkypaamqn///gHlobbffT6fJDX6+/22K33e2+t7vssHlP/7v/9TXV2dnE5nQLnT6Wx0nvVy5syZo8TExICdlZ6erv/4j//Qli1b9Morr2j79u0aO3as6urqWrX9LdGcvg8YMEC//e1v9d5772nVqlWqr6/XrbfeqpMnT0qSuV1L3s/20NL9vmfPHhUXF+uxxx4LKA+F/d4cXq/3ku+V3+/X3/72t1b5HIWKV199VadPn9ZDDz1klqWkpGjFihUqLCzU0qVLVVJSoh/84Aeqrq7uwJa2XEJCggoKCvS73/1Ov/vd79S3b1/deeed2rdvn6TW+f4MBadOndLGjRsbfd5Dbb/X19drxowZuu222zRkyJDL1rvc571hn7bX93xI3s3YSubPn681a9Zo27ZtAReLTpw40fz30KFDNWzYMF133XXatm2b7r777o5oaqtwu91yu93m41tvvVWDBg3Sb37zG7344osd2LL2tWzZMg0dOlSjRo0KKO+s+x0XrF69Wnl5eXrvvfcCrsMYO3as+e9hw4YpJSVF/fv319tvv63p06d3RFNbxYABAzRgwADz8a233qrjx49r4cKF+s///M8ObFn7WrlypWJjYzVhwoSA8lDb79nZ2SouLrbcdTKX0+WPoFx99dUKDw9XeXl5QHl5eblcLtd3bvvqq69q/vz5+uCDDzRs2LDvrHvttdfq6quv1meffdbiNreWlvS9QUREhG6++WazXw3bteQ520NL+n7mzBmtWbOmSV9AVtzvzeFyuS75XtntdnXv3r1V/pasbs2aNXrsscf09ttvNzr8fbHY2FjdcMMNIb/fL2XUqFFmv7rCfjcMQ7/97W81ZcoURUZGfmddK+/3nJwcbdiwQR999JGuueaa76x7uc97wz5tr+/5Lh9QIiMjNWLECG3ZssUsq6+v15YtWwKOFFxswYIFevHFF1VYWKiRI0de8XVOnjypr7/+WgkJCa3S7tbQ3L5/W11dnQ4ePGj2KykpSS6XK+A5/X6/du/e3eTnbA8t6fvatWtVW1uryZMnX/F1rLjfm8Ptdge8V5K0efNm871qjb8lK3vrrbf0k5/8RG+99VbAsPLLOX36tI4fPx7y+/1SDhw4YPars+936cIomM8++6xJ/0Nixf1uGIZycnK0bt06bd26VUlJSVfc5kqf93b7nm+1y21D2Jo1a4yoqChjxYoVxuHDh40nnnjCiI2NNbxer2EYhjFlyhTjmWeeMevPnz/fiIyMNP77v//bKCsrM5fq6mrDMAyjurraePrppw2Px2OUlJQYH374oTF8+HDj+uuvN2pqajqkj5cTbN/z8vKMTZs2GcePHzeKioqMiRMnGtHR0cahQ4fMOvPnzzdiY2ON9957z/jf//1f47777jOSkpKMv/3tb+3ev+8SbN8b3H777cbDDz/cqDyU9nt1dbWxf/9+Y//+/YYk47XXXjP2799vfPHFF4ZhGMYzzzxjTJkyxaz/l7/8xejRo4cxe/Zs48iRI8bixYuN8PBwo7Cw0KxzpffTKoLt+5tvvml069bNWLx4ccDnvaqqyqzz1FNPGdu2bTNKSkqMnTt3GqmpqcbVV19tVFRUtHv/vkuwfV+4cKHx7rvvGseOHTMOHjxo/OxnPzPCwsKMDz/80KzTWfd7g8mTJxspKSmXfM5Q2O9ZWVmGw+Ewtm3bFvD3+80335h1Lv6u27lzp9GtWzfj1VdfNY4cOWLk5uYaERERxsGDB8067fE9T0D5u1//+tdGv379jMjISGPUqFHGJ598Yq674447jGnTppmP+/fvb0hqtOTm5hqGYRjffPONMWbMGKNPnz5GRESE0b9/f+Pxxx+33Ae2QTB9nzFjhlnX6XQa9957r7Fv376A56uvrzeee+45w+l0GlFRUcbdd99tHD16tL26E5Rg+m4YhvHpp58akowPPvig0XOF0n5vGD568dLQ32nTphl33HFHo21uuukmIzIy0rj22muN5cuXN3re73o/rSLYvt9xxx3fWd8wLgy5TkhIMCIjI41/+qd/Mh5++GHjs88+a9+ONUGwfX/llVeM6667zoiOjjbi4uKMO++809i6dWuj5+2M+90wLgyd7d69u/H6669f8jlDYb9fqs+SAj6/l/que/vtt40bbrjBiIyMNAYPHmy8//77Aevb43ve9vcOAAAAWEaXvwYFAABYDwEFAABYDgEFAABYDgEFAABYDgEFAABYDgEFAABYDgEFAABYDgEFAABYDgEFAABYDgEFAABYDgEFAABYDgEFAABYzv8DyoWQzFrWE7EAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.21\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# 数据可视化\n",
    "X_data = np.array([0.21, 0.26, 0.27, 0.27, 0.45, 0.5, 0.8, 1.1, 1.4, 2.0])\n",
    "y_data = np.array([130, 70, 185, 220, 200, 270, 300, 450, 500, 800])\n",
    "plt.scatter(X_data, y_data)\n",
    "plt.show()\n",
    "\n",
    "print(float(X_data[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "9ecd56cb-86b1-4a43-abc4-7e92190c869b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "皮尔逊相关系数为: 0.9891869534783653\n"
     ]
    }
   ],
   "source": [
    "# y = ax + b,  a,b自定\n",
    "# numpy 生成20个值\n",
    "a=2\n",
    "b=1\n",
    "x=np.arange(20)\n",
    "y_data = np.array([a*xi + b for xi in x])\n",
    "noise = np.random.normal(0, 1.5 ,x.shape)  # 假设噪声服从均值为0，标准差为0.5的正态分布\n",
    "y_noisy = y_data + noise\n",
    "#plt.scatter(x, y_data,color='skyblue')\n",
    "plt.scatter(x, y_noisy)\n",
    "plt.show()\n",
    "\n",
    "mean_x = np.mean(x)\n",
    "mean_y = np.mean(y_noisy)\n",
    "numerator = np.sum((x - mean_x) * (y_noisy - mean_y))\n",
    "denominator = np.sqrt(np.sum((x - mean_x)**2) * np.sum((y_noisy - mean_y)**2))\n",
    "corr = numerator / denominator\n",
    "\n",
    "print(f\"皮尔逊相关系数为: {corr}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43fc1b2e-6e76-4ddd-8913-9ff3f7478792",
   "metadata": {},
   "source": [
    "# 皮尔逊相关系数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ea347de-c77c-4a45-85ed-366bd707181e",
   "metadata": {},
   "source": [
    "### 皮尔逊相关系数（Pearson correlation coefficient），通常用字母 r 表示，是一种用于度量两个变量之间线性相关程度的统计量。它的值介于-1和1之间，其中：r=1 表示完全正相关；r=−1 表示完全负相关；r=0 表示没有线性相关。\n",
    "### $$\n",
    "r = \\frac{\\sum_{i=1}^n(x_i - \\bar{x})(y_i - \\bar{y})}{\\sqrt{\\sum_{i=1}^n(x_i-\\bar{x})^2} \\sqrt{\\sum_{i=1}^n(y_i-\\bar{y})^2}}\n",
    "$$\n",
    "\n",
    "![皮尔逊相关系数](assets\\pearson.png)\n",
    "\n",
    "- 0.8-1.0 极强相关； \n",
    "- 0.6-0.8 强相关；\n",
    "- 0.4-0.6 中等程度相关；\n",
    "- 0.2-0.4 弱相关；\n",
    "- 0.0-0.2 极弱相关或无相关\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "f021e752-8682-4bbd-80da-8deb5444a4b8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "皮尔逊相关系数为: 0.92198677450516,截距为0.277963930785711,斜率为2.217423418052943\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "\"x = np.arange(0, 18, 0.02).reshape(-1, 1)\\ny = regr.predict(x)\\n\\nplt.plot(X_train, y_train, '.')\\nplt.plot(x[:, 0], y)\\n# plt.title('线性模型拟合结果{}'.format(regr.coef_))\""
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGeCAYAAAA0WWMxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABBTUlEQVR4nO3deVxVdf7H8dcFBU0FcwMU3FrcdcxRo6LccmnTQaey5pelqRVaajXlTGrNTEOrS+WWuVSmloaaLTpqbiWaa7mUaTGKCpiVoJZIl/P74zuQCCgXLvfc5f18PO4Dv+ceLt/rie7bz/kuDsuyLEREREQ8JMjuDoiIiEhgUfgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY+qYHcHzpebm8vRo0epVq0aDofD7u6IiIhICViWxcmTJ6lbty5BQRepbVguGDdunAUUeDRp0iT/+V9//dV66KGHrBo1alhVqlSx4uPjrfT0dFd+hJWamlroZ+ihhx566KGHHr7xSE1NvehnvcuVjxYtWrBq1ar8doUKv7/EyJEj+eijj1i4cCHh4eEMGzaM+Ph4Pv/88xK/frVq1QBITU0lLCzM1e6JiIiIDbKysoiJicn/HL8Ql8NHhQoViIyMLHQ8MzOTmTNnMm/ePLp06QLA7NmzadasGZs2beLqq68u0evn3WoJCwtT+BAREfExJRky4fKA0/3791O3bl0aN27M3XffzaFDhwDYtm0bOTk5dOvWLf/cpk2bUr9+fZKTk4t9vezsbLKysgo8RERExH+5FD46duzInDlzWL58OVOnTiUlJYW4uDhOnjxJeno6ISEhVK9evcD3REREkJ6eXuxrJiYmEh4env+IiYkp1RsRERER3+DSbZdevXrl/7l169Z07NiRBg0a8N5771G5cuVSdWD06NGMGjUqv513z0hERET8U5nW+ahevTpXXnklBw4cIDIykrNnz3LixIkC52RkZBQ5RiRPaGho/vgOjfMQERHxf2UKH6dOneK7774jKiqKdu3aUbFiRVavXp3//L59+zh06BCxsbFl7qiIiIj4B5duuzz22GPceuutNGjQgKNHjzJu3DiCg4Pp378/4eHhDBo0iFGjRlGjRg3CwsIYPnw4sbGxJZ7pIiIiIv7PpfBx+PBh+vfvz48//kjt2rW57rrr2LRpE7Vr1wZgwoQJBAUF0bdvX7Kzs+nRowdTpkwpl46LiIiIb3JYlmXZ3YlzZWVlER4eTmZmpsZ/iIiI+AhXPr+9bm8XERGRQOV0woYNkJYGUVEQFwfBwXb3yv0UPkRERLxAUhI88ggcPvz7sehomDQJ4uPt61d5KNNsFxERESm7pCTo169g8AA4csQcT0qyp1/lReFDRETERk6nqXgUNQIz79iIEeY8f6HwISIiYqMNGwpXPM5lWZCaas7zFwofIiIiNkpLc+95vkDhQ0RExEZRUe49zxcofIiIiNgoLs7ManE4in7e4YCYGHOev1D4EBERsVFwsJlOC4UDSF574kT/Wu9D4UNERMRm8fGwaBHUq1fweHS0Oe5v63xokTEREREvEB8PvXtrhVMRERHxoOBg6NTJ7l6UP912EREREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQERERj1L4EBEREY9S+BARERGPUvgQEREJJLm5kJNjaxcUPkRERALFgQPQpQuMG2drNxQ+RERE/J3TCePHQ+vWsG4dTJkCP/9sW3cUPkRERPzZ3r1w7bXw6KPw66/QtSvs2AGXXmpblxQ+RERE/FFODjz7LLRtC5s3Q1gYzJgBK1dCo0a2dq2CrT9dRERE3G/HDhg4EHbuNO1bboGpUyE62tZu5VHlQ0RExF9kZ8NTT0H79iZ41KgBc+fCBx94TfAAVT5ERET8w6ZNptrx9dem/ec/w6uvQkSEvf0qgiofIiIivuyXX8xg0muuMcEjIgLefx/ee88rgweo8iEiIuK71q6F+++H774z7XvugQkTzO0WL6bKh4iIiK/JyoIHH4TOnU3wiI6Gjz+GN9/0+uABqnyIiIj4luXLYcgQSE017aFD4YUXzFRaH6HwISIi4gt++glGjTLVDYDGjeGNN0z1w8fotouIiIi3W7wYmjc3wcPhgJEj4auv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+j+AcwXSe4XAer96r/4rkN6v3qt/uVjFI48GnIqIiIhHKXyIiIiIRwVU+AgNDWXcuHGEhoba3ZVyF0jvFQLr/eq9+q9Aer96r4HN6wacioiIiH8LqMqHiIiI2E/hQ0RERDxK4UNEREQ8SuFDREREPMrvwsfkyZNp2LAhlSpVomPHjnzxxRcXPH/hwoU0bdqUSpUq0apVKz7++GMP9bT0EhMTad++PdWqVaNOnTr06dOHffv2XfB75syZg8PhKPCoVKmSh3pcNk8//XShvjdt2vSC3+OL1xWgYcOGhd6rw+EgISGhyPN96bquX7+eW2+9lbp16+JwOFiyZEmB5y3LYuzYsURFRVG5cmW6devG/v37L/q6rv7Oe8qF3m9OTg5PPPEErVq1okqVKtStW5d77rmHo0ePXvA1S/O74AkXu7b33ntvoX737Nnzoq/rjdf2Yu+1qN9fh8PBiy++WOxreut1LU9+FT7effddRo0axbhx49i+fTtt2rShR48eHDt2rMjzN27cSP/+/Rk0aBA7duygT58+9OnTh927d3u4565Zt24dCQkJbNq0iZUrV5KTk0P37t05ffr0Bb8vLCyMtLS0/MfBgwc91OOya9GiRYG+f/bZZ8We66vXFWDLli0F3ufKlSsB+POf/1zs9/jKdT19+jRt2rRh8uTJRT7/wgsv8MorrzBt2jQ2b95MlSpV6NGjB2fOnCn2NV39nfekC73fX375he3btzNmzBi2b99OUlIS+/bt47bbbrvo67ryu+ApF7u2AD179izQ7/nz51/wNb312l7svZ77HtPS0pg1axYOh4O+ffte8HW98bqWK8uPdOjQwUpISMhvO51Oq27dulZiYmKR599+++3WzTffXOBYx44draFDh5ZrP93t2LFjFmCtW7eu2HNmz55thYeHe65TbjRu3DirTZs2JT7fX66rZVnWI488Yl122WVWbm5ukc/76nUFrMWLF+e3c3NzrcjISOvFF1/MP3bixAkrNDTUmj9/frGv4+rvvF3Of79F+eKLLyzAOnjwYLHnuPq7YIei3uuAAQOs3r17u/Q6vnBtS3Jde/fubXXp0uWC5/jCdXU3v6l8nD17lm3bttGtW7f8Y0FBQXTr1o3k5OQivyc5ObnA+QA9evQo9nxvlZmZCUCNGjUueN6pU6do0KABMTEx9O7dmz179niie26xf/9+6tatS+PGjbn77rs5dOhQsef6y3U9e/Ysc+fOZeDAgRfcZNGXr2uelJQU0tPTC1y38PBwOnbsWOx1K83vvDfLzMzE4XBQvXr1C57nyu+CN1m7di116tShSZMmPPjgg/z444/Fnusv1zYjI4OPPvqIQYMGXfRcX72upeU34eP48eM4nU4iIiIKHI+IiCA9Pb3I70lPT3fpfG+Um5vLiBEjuPbaa2nZsmWx5zVp0oRZs2axdOlS5s6dS25uLtdccw2HDx/2YG9Lp2PHjsyZM4fly5czdepUUlJSiIuL4+TJk0We7w/XFWDJkiWcOHGCe++9t9hzfPm6nivv2rhy3UrzO++tzpw5wxNPPEH//v0vuPGYq78L3qJnz5689dZbrF69mueff55169bRq1cvnE5nkef7y7V98803qVatGvHx8Rc8z1eva1l43a624pqEhAR279590fuDsbGxxMbG5revueYamjVrxvTp0/nnP/9Z3t0sk169euX/uXXr1nTs2JEGDRrw3nvvlehfFL5q5syZ9OrVi7p16xZ7ji9fVzFycnK4/fbbsSyLqVOnXvBcX/1duPPOO/P/3KpVK1q3bs1ll13G2rVr6dq1q409K1+zZs3i7rvvvuggcF+9rmXhN5WPWrVqERwcTEZGRoHjGRkZREZGFvk9kZGRLp3vbYYNG8aHH37ImjVriI6Odul7K1asSNu2bTlw4EA59a78VK9enSuvvLLYvvv6dQU4ePAgq1at4v7773fp+3z1uuZdG1euW2l+571NXvA4ePAgK1eudHm79Yv9Lnirxo0bU6tWrWL77Q/XdsOGDezbt8/l32Hw3evqCr8JHyEhIbRr147Vq1fnH8vNzWX16tUF/mV4rtjY2ALnA6xcubLY872FZVkMGzaMxYsX8+mnn9KoUSOXX8PpdLJr1y6ioqLKoYfl69SpU3z33XfF9t1Xr+u5Zs+eTZ06dbj55ptd+j5fva6NGjUiMjKywHXLyspi8+bNxV630vzOe5O84LF//35WrVpFzZo1XX6Ni/0ueKvDhw/z448/FttvX7+2YCqX7dq1o02bNi5/r69eV5fYPeLVnRYsWGCFhoZac+bMsfbu3WsNGTLEql69upWenm5ZlmX93//9n/Xkk0/mn//5559bFSpUsF566SXr66+/tsaNG2dVrFjR2rVrl11voUQefPBBKzw83Fq7dq2VlpaW//jll1/yzzn/vT7zzDPWihUrrO+++87atm2bdeedd1qVKlWy9uzZY8dbcMmjjz5qrV271kpJSbE+//xzq1u3blatWrWsY8eOWZblP9c1j9PptOrXr2898cQThZ7z5et68uRJa8eOHdaOHTsswBo/fry1Y8eO/Nkdzz33nFW9enVr6dKl1ldffWX17t3batSokfXrr7/mv0aXLl2sV199Nb99sd95O13o/Z49e9a67bbbrOjoaGvnzp0Ffo+zs7PzX+P893ux3wW7XOi9njx50nrssces5ORkKyUlxVq1apV11VVXWVdccYV15syZ/NfwlWt7sf+OLcuyMjMzrUsuucSaOnVqka/hK9e1PPlV+LAsy3r11Vet+vXrWyEhIVaHDh2sTZs25T93ww03WAMGDChw/nvvvWddeeWVVkhIiNWiRQvro48+8nCPXQcU+Zg9e3b+Oee/1xEjRuT/vURERFg33XSTtX37ds93vhTuuOMOKyoqygoJCbHq1atn3XHHHdaBAwfyn/eX65pnxYoVFmDt27ev0HO+fF3XrFlT5H+3ee8nNzfXGjNmjBUREWGFhoZaXbt2LfR30KBBA2vcuHEFjl3od95OF3q/KSkpxf4er1mzJv81zn+/F/tdsMuF3usvv/xide/e3apdu7ZVsWJFq0GDBtbgwYMLhQhfubYX++/Ysixr+vTpVuXKla0TJ04U+Rq+cl3Lk8OyLKtcSysiIiIi5/CbMR8iIiLiGxQ+RERExKMUPkRERMSjFD5ERETEoxQ+RERExKMUPkRERMSjFD5ERETEoxQ+RERExKMUPkRERMSjFD5ERETEoxQ+RERExKMUPkRERMSj/h/b6lja+e2N9wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# y = ax + b,  a,b自定\n",
    "# numpy 生成20个值\n",
    "a=2\n",
    "b=1\n",
    "x=np.arange(20)\n",
    "y_data = np.array([a*xi + b for xi in x])\n",
    "noise = np.random.normal(0, 7 ,x.shape)  # 假设噪声服从均值为0，标准差为0.5的正态分布\n",
    "y_noisy = y_data + noise\n",
    "\n",
    "coefficients = np.polyfit(x, y_noisy, 1)  #拟合\n",
    "slope, intercept = coefficients   #截距和斜率\n",
    "\n",
    "# 生成拟合线的y值\n",
    "y_fit = slope * x + intercept\n",
    "\n",
    "# 绘制原始数据点\n",
    "plt.scatter(x, y_noisy, label='Original Data', color='blue')\n",
    "\n",
    "# 绘制拟合线\n",
    "plt.plot(x, y_fit, label='Fitted Line', color='red')\n",
    "\n",
    "mean_x = np.mean(x)\n",
    "mean_y = np.mean(y_fit)\n",
    "numerator = np.sum((x - mean_x) * (y_noisy - mean_y))\n",
    "denominator = np.sqrt(np.sum((x - mean_x)**2) * np.sum((y_noisy - mean_y)**2))\n",
    "corr = numerator / denominator\n",
    "\n",
    "print(f\"皮尔逊相关系数为: {corr},截距为{intercept},斜率为{slope}\")\n",
    "\n",
    "x = np.arange(0, 18, 0.02).reshape(-1, 1)\n",
    "y = regr.predict(x)\n",
    "\n",
    "plt.plot(X_train, y_train, '.')\n",
    "plt.plot(x[:, 0], y)\n",
    "print(f\"线性模型拟合斜率{regr.coef_},截距为{regr.intercept_}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "7a1464f1-3ceb-4a21-b2ba-4b7b468ead11",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.85176166 -8.49218062  7.44294357  3.43143555  2.46452096 11.67008562\n",
      " 15.97110838  8.56791847  9.5341268   8.62317063 27.92323496 29.30366319\n",
      " 13.60784078 24.02471302 21.18658645 36.49132791 42.72690945 29.84963995\n",
      " 29.26961669 31.7496614 ]\n",
      "[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]\n"
     ]
    }
   ],
   "source": [
    "print(y_noisy)\n",
    "print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "1b16cf06-97d0-40c1-9295-4a56fd37885d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "75175408-b9cd-407a-9c77-febc60a89226",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "b3bafa00-8368-44ae-850e-0bd91760232b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-3 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-3 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-3 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-3 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-3 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-3 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LinearRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构建模型\n",
    "regr = LinearRegression()\n",
    "regr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "7c62f256-845d-44c9-8d86-6966f50a2e84",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([2.02712719]), np.float64(-1.9478040255145856))"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regr.coef_, regr.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "16c77b1d-2edf-4d50-ad1a-cd1710abdc18",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '线性模型拟合结果[2.02712719]')"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 32447 (\\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 24615 (\\N{CJK UNIFIED IDEOGRAPH-6027}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 27169 (\\N{CJK UNIFIED IDEOGRAPH-6A21}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 22411 (\\N{CJK UNIFIED IDEOGRAPH-578B}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 25311 (\\N{CJK UNIFIED IDEOGRAPH-62DF}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 21512 (\\N{CJK UNIFIED IDEOGRAPH-5408}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 32467 (\\N{CJK UNIFIED IDEOGRAPH-7ED3}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 26524 (\\N{CJK UNIFIED IDEOGRAPH-679C}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 32447 (\\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 24615 (\\N{CJK UNIFIED IDEOGRAPH-6027}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 27169 (\\N{CJK UNIFIED IDEOGRAPH-6A21}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 22411 (\\N{CJK UNIFIED IDEOGRAPH-578B}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 25311 (\\N{CJK UNIFIED IDEOGRAPH-62DF}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 21512 (\\N{CJK UNIFIED IDEOGRAPH-5408}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 32467 (\\N{CJK UNIFIED IDEOGRAPH-7ED3}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 26524 (\\N{CJK UNIFIED IDEOGRAPH-679C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGzCAYAAAABsTylAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEfklEQVR4nO3de3gU5d3/8fcmkBOQjZCQBCEQUESOIiAEJShEkKKCoAVrFarWPoq0iFoEUaSisdKqj4qo/SHY1iM+KNWqFBCCyvlUAQFRwzkJBCQh55Cd3x83rEZyArKZ2ezndV25rt73zs5+18mST2dn7q/LsiwLEREREQcKsrsAERERkcooqIiIiIhjKaiIiIiIYymoiIiIiGMpqIiIiIhjKaiIiIiIYymoiIiIiGMpqIiIiIhjKaiIiIiIYymoiIhPjR07FpfLhcvlonPnznaXI1WYMGGC91g1btzY7nJEAAUVEakD0dHR/OMf/+Cpp57yzhUUFDBr1iwGDRpEfHw8TZo0oXv37syePZuysrIa7/tf//oXl156KWFhYSQkJDBt2jROnDhRbpulS5dy++230759eyIiImjbti133nknGRkZ5bbbvXu39w91RT+//e1vvdvm5eUxbdo0rrnmGpo2bYrL5WLevHmn1efxeJg3bx7XX389rVq1olGjRnTu3JkZM2ZQVFRUbtt58+ZV+fpvvPGGd9udO3dy33330bdvX8LCwnC5XOzevbvC/0Z5eXlMmDCBli1bEhoaysUXX8zs2bNP2+7WW2/lH//4B/369avuP7tInXGp149I1bZt20b37t0JCQmp8PGSkhI2bdpU7Tbbt2+nqKgooLZr164dY8eOZfny5af9Ed26dStdu3Zl4MCBDBo0iMjISBYtWsT777/Pbbfdxuuvv17hvn/qk08+YejQoVx55ZXcfPPNbNmyhVmzZnHXXXeV+0Pcs2dPjh49yk033cSFF17I999/z4svvkhERASbN28mLi4OgPz8fN5///3TXufTTz/ljTfe4N133+Wmm24CTKhJTEwkISGBtm3bsnz5cubOncvYsWPLPTcvL48mTZrQp08frr32Wpo3b86qVat4/fXXSU5O5rPPPsPlcgHw/fffs3LlytNe/9lnn+W///0v+/fv99Y6b9487rjjDjp27EiDBg3YvHkz6enptGnTptxzy8rKSE5OZv369YwbN44LL7yQRYsWsXDhQp544gmmTJly2uuNHTuW9957j7y8vGqPgYjPWSJSpS1btliXX355pY/37t27Rtvs2rUr4LazLMsaM2aM1bp169O2OXz4sLV169bT5n/zm99YgPf5VenYsaPVrVs3q7S01Dv38MMPWy6Xy9q+fbt3Li0tzSorKyv33LS0NAuwHn744WpfZ+DAgVZkZKRVWFjonSsqKrIyMjIsy7KsdevWWYA1d+7c055bXFxsffnll6fNT58+3QKsxYsXV/naBQUFVpMmTayrr7663PyRI0es3Nxcy7Isa+bMmRZgpaenn/b8d9991wKsOXPmlJsfOXKkFRYWZmVlZZ32nDFjxliNGjWqsi6RuqKvfkTEFtHR0XTq1Om0+RtuuAGA7du3V/n8r7/+mq+//pq77rqLBg0aeOfvueceLMvivffe884lJycTFFT+n7vk5GSaNm1a7etkZGSwbNkyRowYQVhYmHc+NDTUe3ajKiEhIfTt2/e0+Zq+zw8//JDjx49zyy23lJtv2rQpTZo0qfb1P//8cwBGjx5dbn706NEUFRWxcOHCavchYicFFRFxlMzMTMAEmaps2rQJMF/r/FSLFi1o2bKl9/HK5OXlkZeXV+3rvP3223g8ntOCwrmq6ft84403CA8PZ8SIEWf1OsXFxQQHB5/2NV1ERAQAGzZsOKv9itQVBRURcYySkhKee+45EhMT6dWrV5XbnroQNj4+/rTH4uPjOXjwYJXPf+655ygpKWHUqFFVbvfGG28QHx/PgAEDqqn+zDz99NNERkYyZMiQSrc5evQon376Kdddd12Nzp5U5KKLLqKsrIzVq1eXmz91puXAgQNntV+RuqKgIiKOce+99/L111/z4osvlvs6pyKFhYWA+Qrm58LCwryPV2TFihVMnz6dX/7yl1UGkG+++YYNGzYwevTo0746OhdPPvkkS5Ys4amnniIqKqrS7d577z1KSkrO6WzOr371K9xuN7fffjuLFy9m9+7dvPrqq7z00ksAVf53EnECBRURcYSZM2fyt7/9jccff5xf/OIX1W4fHh4OmK82fq6oqMj7+M/t2LGDG264gc6dO/P//t//q/I1Tt0OXJtf+7zzzjtMnTqVO+64g7vvvrva12/atGmVZ12qExcXx7/+9S+Ki4sZNGgQiYmJPPjgg7zwwgsAWi9FHE9BRURsN2/ePCZNmsT//M//MHXq1Bo959RXPj9fC+XUXIsWLU6b37dvH4MGDcLtdvPxxx9X+3XKm2++yUUXXUSPHj1qVFN1Fi9ezG233cbQoUN5+eWXq9x27969fP7559x00000bNjwnF43OTmZ77//nk2bNvHFF19w4MAB+vTpA0D79u3Pad8ivqagIiK2WrhwIXfeeScjRoxg1qxZNX7eJZdcAsD69evLzR88eJD9+/d7Hz/lyJEjDBo0iOLiYhYtWlThtS0/tWbNGr799ttaO5uyZs0abrjhBnr27Mm7775b7Vdbb731FpZl1drrBwcHc8kll3D55ZfTuHFjlixZAkBKSkqt7F/EVxRURMQ2K1asYPTo0SQnJ/PGG29Ueh1IaWkpO3bsKHf2pFOnTnTo0IFXX3213Eq2s2fPxuVyceONN3rn8vPz+cUvfsGBAwf4+OOPufDCC6ut7c033wTMNR7navv27QwdOpQ2bdrw0UcfVfq11M9fPyEhgSuuuOKcX//nDh8+zJ///Ge6du2qoCKOV3WkFxHxkT179nD99dd7Q8X8+fPLPd61a1e6du0KmDtTLr74YsaMGVNumfqZM2dy/fXXM2jQIEaPHs3WrVt58cUXufPOO7n44ou9291yyy2sXbuW22+/ne3bt5dbu6Rx48YMHz683GuXlZXxzjvv0KdPH9q1a1fpe3jxxRc5duyY9w6jDz/8kP379wMwfvx43G43x48fZ/Dgwfzwww88+OCD/Pvf/y63j3bt2pGUlFRubuvWrXz11Vc89NBD3lVrfy4nJ8d7ncmXX37prScqKoqoqCjuvfde77b9+/cnKSmJCy64gMzMTF599VXy8vL46KOPavUiYRFfUFAREVukp6eTk5MDwLhx4057fNq0ad6gUplrr72WBQsWMH36dMaPH09MTAxTpkzh0UcfLbfd5s2bAXjttdd47bXXyj3WunXr04LKkiVLyMrK4uGHH67y9f/yl7+wZ88e73jBggUsWLAAgF//+te43W6OHDnCvn37AHjooYdO28eYMWNOCyqnLuKt6mzODz/8wCOPPFJu7q9//av3Pf00qPTo0YP58+dz4MABIiMjufrqq3n88cdp27Ztle9PxAkUVETE5zweD9nZ2TRo0MB7O+6VV16JVcNWY23atKl02+HDh58WNH6usmZ9lRk8eHCNaqvJfquqvTKpqamk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FxQUREpKCqtWrarwOcXFxRQXF3vHubm5Pq+z1pSdgI2vw7InoSDbzLXpZxZsi+9qb20iIiIOZGtQyc7OpqysjNjY2HLzsbGx7Nixo8LnpKamMn369Loor/ZYFny7BP4zFQ6ffF/NLoBBM6D9NVqwTUREpBKOuJj2TEyePJmcnBzvz759++wuqWpZ2+AfN8AbN5qQEt4UhsyEe1bDRUMUUkRERKpg6xmV6OhogoODycrKKjeflZVFXFxchc8JDQ0lNNQPVmQ9nnWys/E/wfKYzsa9fwf9HoDwKLurExER8Qu2nlEJCQmhR48eLF261Dvn8XhYunQpSUlJNlZ2DkoKIG0mPN8dNv7dhJSOw2HcWvNVj0KKiIhIjdl+e/LEiRMZM2YMPXv25LLLLuO5554jPz+f3/zmN3aXdmY8HtjyrulsnHvAzJ3f01wom9Db3tpERET8lO1BZdSoURw+fJhHH32UzMxMLrnkEj799NPTLrB1tN1fmM7GGZvN2J0AKdOg80hdgyIiInIObF9H5VzZuo7Kke9MZ+MdH5lxaCT0mwi974aGYXVbi4iIiB/xi3VU/FbBUUh7Gtb97cfOxj3GwpWToXGM3dWJiIjUGwoqZ+JEiQknaU9D0TEzd+EguPpxaN7B1tJERETqIwWVmrAs2P6h6Wx89Hsz17wTDJ4B7QbYW5uIiEg9pqBSnQMbYNFU2LvSjBvHwoCppjdPULC9tYmIiNRzCiqVObbP3Gq85V0zbhAOfcfD5X+A0Mb21iYiIhIgFFQq8+lDP97N0+1mGPAIuM+3tyYREZEAo6BSmQGPQPFxuHo6tOhudzUiIiIBSUGlMs07wJh/2V2FiIhIQPO77skiIiISOBRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRUbJKRU8jK77LJyCm0uxQRERHHamB3AYHonXV7mbxgCx4LglyQOqILo3ol2F2WiIiI4+iMSh3LyCn0hhQAjwVTFmzVmRUREZEKKKjUsfTsfG9IOaXMstidXWBPQSIiIg6moFLHEqMbEeQqPxfsctEmOsKegkRERBxMQaWOxbvDSR3RhWCXSSvBLhdPjuhMvDvc5spEREScRxfT2mBUrwSS28ewO7uANtERCikiIiKVUFCxSbw7XAFFRESkGvrqR0RERBxLQUVEREQcy2dB5YknnqBv375EREQQFRVV4TZ79+5l6NChRERE0Lx5cx588EFOnDjhq5JERETEz/jsGpWSkhJuuukmkpKSmDNnzmmPl5WVMXToUOLi4li5ciUZGRncdtttNGzYkCeffNJXZYmIiIgfcVmWZVW/2dmbN28eEyZM4NixY+XmP/nkE6699loOHjxIbGwsAC+//DKTJk3i8OHDhISEVLi/4uJiiouLvePc3FxatWpFTk4OkZGRPnsfIiIiUntyc3Nxu93V/v227RqVVatW0aVLF29IARg8eDC5ubls27at0uelpqbidru9P61ataqLckVERMQGtgWVzMzMciEF8I4zMzMrfd7kyZPJycnx/uzbt8+ndYqIiIh9ziioPPTQQ7hcrip/duzY4ataAQgNDSUyMrLcj4iIiNRPZ3Qx7f3338/YsWOr3KZt27Y12ldcXBxr164tN5eVleV9TEREROSMgkpMTAwxMTG18sJJSUk88cQTHDp0iObNmwOwePFiIiMj6dixY628hoiIiPg3n92evHfvXo4ePcrevXspKytj8+bNAFxwwQU0btyYQYMG0bFjR2699VaefvppMjMzmTp1KuPGjSM0NNRXZYmIiIgf8dntyWPHjuX1118/bX7ZsmVceeWVAOzZs4e7776b5cuX06hRI8aMGcNTTz1FgwY1z085OTlERUWxb98+Xa8iIiLiJ04tL3Ls2DHcbnel2/l8HRVf279/v25RFhER8VP79u2jZcuWlT7u90HF4/Fw8OBBmjRpgsvlqtV9n0p7gXC2Ru+1/gqk96v3Wj8F0nuFwHm/lmVx/PhxWrRoQVBQ5Tch++walboSFBRUZRKrDYF0G7Tea/0VSO9X77V+CqT3CoHxfqv6yucUdU8WERERx1JQEREREcdSUKlCaGgo06ZNC4jbpfVe669Aer96r/VTIL1XCLz3Wx2/v5hWRERE6i+dURERERHHUlARERERx1JQEREREcdSUBERERHHUlARERERxwrooDJr1izatGlDWFgYvXv3Zu3atVVuP3/+fDp06EBYWBhdunTh448/rqNKz01qaiq9evWiSZMmNG/enOHDh7Nz584qnzNv3jxcLle5n7CwsDqq+Ow99thjp9XdoUOHKp/jr8cVoE2bNqe9X5fLxbhx4yrc3p+O64oVK7juuuto0aIFLpeLDz74oNzjlmXx6KOPEh8fT3h4OCkpKezatava/Z7p574uVPVeS0tLmTRpEl26dKFRo0a0aNGC2267jYMHD1a5z7P5LNSV6o7t2LFjT6v9mmuuqXa//nZsgQo/vy6Xi5kzZ1a6TycfW18I2KDyzjvvMHHiRKZNm8bGjRvp1q0bgwcP5tChQxVuv3LlSm6++WbuuOMONm3axPDhwxk+fDhbt26t48rPXFpaGuPGjWP16tUsXryY0tJSBg0aRH5+fpXPi4yMJCMjw/uzZ8+eOqr43HTq1Klc3V988UWl2/rzcQVYt25dufe6ePFiAG666aZKn+MvxzU/P59u3boxa9asCh9/+umnef7553n55ZdZs2YNjRo1YvDgwRQVFVW6zzP93NeVqt5rQUEBGzdu5JFHHmHjxo0sWLCAnTt3cv3111e73zP5LNSl6o4twDXXXFOu9rfeeqvKffrjsQXKvceMjAxee+01XC4XI0eOrHK/Tj22PmEFqMsuu8waN26cd1xWVma1aNHCSk1NrXD7X/7yl9bQoUPLzfXu3dv63e9+59M6feHQoUMWYKWlpVW6zdy5cy232113RdWSadOmWd26davx9vXpuFqWZf3hD3+w2rVrZ3k8ngof99fjCljvv/++d+zxeKy4uDhr5syZ3rljx45ZoaGh1ltvvVXpfs70c2+Hn7/Xiqxdu9YCrD179lS6zZl+FuxS0fsdM2aMNWzYsDPaT305tsOGDbMGDBhQ5Tb+cmxrS0CeUSkpKWHDhg2kpKR454KCgkhJSWHVqlUVPmfVqlXltgcYPHhwpds7WU5ODgBNmzatcru8vDxat25Nq1atGDZsGNu2bauL8s7Zrl27aNGiBW3btuWWW25h7969lW5bn45rSUkJ//znP7n99tur7CTur8f1p9LT08nMzCx37NxuN71796702J3N596pcnJycLlcREVFVbndmXwWnGb58uU0b96ciy66iLvvvpsjR45Uum19ObZZWVn8+9//5o477qh2W38+tmcqIINKdnY2ZWVlxMbGlpuPjY0lMzOzwudkZmae0fZO5fF4mDBhApdffjmdO3eudLuLLrqI1157jYULF/LPf/4Tj8dD37592b9/fx1We+Z69+7NvHnz+PTTT5k9ezbp6en069eP48ePV7h9fTmuAB988AHHjh1j7NixlW7jr8f1504dnzM5dmfzuXeioqIiJk2axM0331xlZ90z/Sw4yTXXXMPf//53li5dyp///GfS0tIYMmQIZWVlFW5fX47t66+/TpMmTRgxYkSV2/nzsT0bDewuQOrWuHHj2Lp1a7XfZyYlJZGUlOQd9+3bl4svvphXXnmFxx9/3NdlnrUhQ4Z4/3fXrl3p3bs3rVu35t13363R/0vxZ3PmzGHIkCG0aNGi0m389biKUVpayi9/+Ussy2L27NlVbuvPn4XRo0d7/3eXLl3o2rUr7dq1Y/ny5QwcONDGynzrtdde45Zbbqn2And/PrZnIyDPqERHRxMcHExWVla5+aysLOLi4ip8Tlxc3Blt70T33nsvH330EcuWLaNly5Zn9NyGDRvSvXt3vv32Wx9V5xtRUVG0b9++0rrrw3EF2LNnD0uWLOHOO+88o+f563E9dXzO5NidzefeSU6FlD179rB48eIqz6ZUpLrPgpO1bduW6OjoSmv392ML8Pnnn7Nz584z/gyDfx/bmgjIoBISEkKPHj1YunSpd87j8bB06dJy/2/zp5KSksptD7B48eJKt3cSy7K49957ef/99/nss89ITEw8432UlZWxZcsW4uPjfVCh7+Tl5fHdd99VWrc/H9efmjt3Ls2bN2fo0KFn9Dx/Pa6JiYnExcWVO3a5ubmsWbOm0mN3Np97pzgVUnbt2sWSJUto1qzZGe+jus+Ck+3fv58jR45UWrs/H9tT5syZQ48ePejWrdsZP9efj22N2H01r13efvttKzQ01Jo3b5719ddfW3fddZcVFRVlZWZmWpZlWbfeeqv10EMPebf/8ssvrQYNGlh/+ctfrO3bt1vTpk2zGjZsaG3ZssWut1Bjd999t+V2u63ly5dbGRkZ3p+CggLvNj9/v9OnT7cWLVpkfffdd9aGDRus0aNHW2FhYda2bdvseAs1dv/991vLly+30tPTrS+//NJKSUmxoqOjrUOHDlmWVb+O6yllZWVWQkKCNWnSpNMe8+fjevz4cWvTpk3Wpk2bLMB65plnrE2bNnnvdHnqqaesqKgoa+HChdZXX31lDRs2zEpMTLQKCwu9+xgwYID1wgsveMfVfe7tUtV7LSkpsa6//nqrZcuW1ubNm8t9houLi737+Pl7re6zYKeq3u/x48etBx54wFq1apWVnp5uLVmyxLr00kutCy+80CoqKvLuoz4c21NycnKsiIgIa/bs2RXuw5+OrS8EbFCxLMt64YUXrISEBCskJMS67LLLrNWrV3sf69+/vzVmzJhy27/77rtW+/btrZCQEKtTp07Wv//97zqu+OwAFf7MnTvXu83P3++ECRO8/21iY2OtX/ziF9bGjRvrvvgzNGrUKCs+Pt4KCQmxzj//fGvUqFHWt99+6328Ph3XUxYtWmQB1s6dO097zJ+P67Jlyyr8vT31fjwej/XII49YsbGxVmhoqDVw4MDT/hu0bt3amjZtWrm5qj73dqnqvaanp1f6GV62bJl3Hz9/r9V9FuxU1fstKCiwBg0aZMXExFgNGza0Wrdubf32t789LXDUh2N7yiuvvGKFh4dbx44dq3Af/nRsfcFlWZbl01M2IiIiImcpIK9REREREf+goCIiIiKOpaAiIiIijqWgIiIiIo6loCIiIiKOpaAiIiIijqWgIiIiIo6loCIiIiKOpaAiIiIijqWgIiIiIo6loCIiIiKO9f8BB62itq4oVPwAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(0, 18, 0.02).reshape(-1, 1)\n",
    "y = regr.predict(x)\n",
    "\n",
    "plt.plot(X_train, y_train, '.')\n",
    "plt.plot(x[:, 0], y)\n",
    "plt.title('线性模型拟合结果{}'.format(regr.coef_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "1d6035d7-5d53-4ecb-934d-6f828a1bd5d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '线性模型拟合结果[2.02712719]')"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 32447 (\\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 24615 (\\N{CJK UNIFIED IDEOGRAPH-6027}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 27169 (\\N{CJK UNIFIED IDEOGRAPH-6A21}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 22411 (\\N{CJK UNIFIED IDEOGRAPH-578B}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 25311 (\\N{CJK UNIFIED IDEOGRAPH-62DF}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 21512 (\\N{CJK UNIFIED IDEOGRAPH-5408}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 32467 (\\N{CJK UNIFIED IDEOGRAPH-7ED3}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/events.py:82: UserWarning: Glyph 26524 (\\N{CJK UNIFIED IDEOGRAPH-679C}) missing from font(s) DejaVu Sans.\n",
      "  func(*args, **kwargs)\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 32447 (\\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 24615 (\\N{CJK UNIFIED IDEOGRAPH-6027}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 27169 (\\N{CJK UNIFIED IDEOGRAPH-6A21}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 22411 (\\N{CJK UNIFIED IDEOGRAPH-578B}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 25311 (\\N{CJK UNIFIED IDEOGRAPH-62DF}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 21512 (\\N{CJK UNIFIED IDEOGRAPH-5408}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 32467 (\\N{CJK UNIFIED IDEOGRAPH-7ED3}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/home/software/commom_envs/pub_jupyter/lib/python3.10/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 26524 (\\N{CJK UNIFIED IDEOGRAPH-679C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n",
      "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGzCAYAAAABsTylAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEfklEQVR4nO3de3gU5d3/8fcmkBOQjZCQBCEQUESOIiAEJShEkKKCoAVrFarWPoq0iFoEUaSisdKqj4qo/SHY1iM+KNWqFBCCyvlUAQFRwzkJBCQh55Cd3x83rEZyArKZ2ezndV25rt73zs5+18mST2dn7q/LsiwLEREREQcKsrsAERERkcooqIiIiIhjKaiIiIiIYymoiIiIiGMpqIiIiIhjKaiIiIiIYymoiIiIiGMpqIiIiIhjKaiIiIiIYymoiIhPjR07FpfLhcvlonPnznaXI1WYMGGC91g1btzY7nJEAAUVEakD0dHR/OMf/+Cpp57yzhUUFDBr1iwGDRpEfHw8TZo0oXv37syePZuysrIa7/tf//oXl156KWFhYSQkJDBt2jROnDhRbpulS5dy++230759eyIiImjbti133nknGRkZ5bbbvXu39w91RT+//e1vvdvm5eUxbdo0rrnmGpo2bYrL5WLevHmn1efxeJg3bx7XX389rVq1olGjRnTu3JkZM2ZQVFRUbtt58+ZV+fpvvPGGd9udO3dy33330bdvX8LCwnC5XOzevbvC/0Z5eXlMmDCBli1bEhoaysUXX8zs2bNP2+7WW2/lH//4B/369avuP7tInXGp149I1bZt20b37t0JCQmp8PGSkhI2bdpU7Tbbt2+nqKgooLZr164dY8eOZfny5af9Ed26dStdu3Zl4MCBDBo0iMjISBYtWsT777/Pbbfdxuuvv17hvn/qk08+YejQoVx55ZXcfPPNbNmyhVmzZnHXXXeV+0Pcs2dPjh49yk033cSFF17I999/z4svvkhERASbN28mLi4OgPz8fN5///3TXufTTz/ljTfe4N133+Wmm24CTKhJTEwkISGBtm3bsnz5cubOncvYsWPLPTcvL48mTZrQp08frr32Wpo3b86qVat4/fXXSU5O5rPPPsPlcgHw/fffs3LlytNe/9lnn+W///0v+/fv99Y6b9487rjjDjp27EiDBg3YvHkz6enptGnTptxzy8rKSE5OZv369YwbN44LL7yQRYsWsXDhQp544gmmTJly2uuNHTuW9957j7y8vGqPgYjPWSJSpS1btliXX355pY/37t27Rtvs2rUr4LazLMsaM2aM1bp169O2OXz4sLV169bT5n/zm99YgPf5VenYsaPVrVs3q7S01Dv38MMPWy6Xy9q+fbt3Li0tzSorKyv33LS0NAuwHn744WpfZ+DAgVZkZKRVWFjonSsqKrIyMjIsy7KsdevWWYA1d+7c055bXFxsffnll6fNT58+3QKsxYsXV/naBQUFVpMmTayrr7663PyRI0es3Nxcy7Isa+bMmRZgpaenn/b8d9991wKsOXPmlJsfOXKkFRYWZmVlZZ32nDFjxliNGjWqsi6RuqKvfkTEFtHR0XTq1Om0+RtuuAGA7du3V/n8r7/+mq+//pq77rqLBg0aeOfvueceLMvivffe884lJycTFFT+n7vk5GSaNm1a7etkZGSwbNkyRowYQVhYmHc+NDTUe3ajKiEhIfTt2/e0+Zq+zw8//JDjx49zyy23lJtv2rQpTZo0qfb1P//8cwBGjx5dbn706NEUFRWxcOHCavchYicFFRFxlMzMTMAEmaps2rQJMF/r/FSLFi1o2bKl9/HK5OXlkZeXV+3rvP3223g8ntOCwrmq6ft84403CA8PZ8SIEWf1OsXFxQQHB5/2NV1ERAQAGzZsOKv9itQVBRURcYySkhKee+45EhMT6dWrV5XbnroQNj4+/rTH4uPjOXjwYJXPf+655ygpKWHUqFFVbvfGG28QHx/PgAEDqqn+zDz99NNERkYyZMiQSrc5evQon376Kdddd12Nzp5U5KKLLqKsrIzVq1eXmz91puXAgQNntV+RuqKgIiKOce+99/L111/z4osvlvs6pyKFhYWA+Qrm58LCwryPV2TFihVMnz6dX/7yl1UGkG+++YYNGzYwevTo0746OhdPPvkkS5Ys4amnniIqKqrS7d577z1KSkrO6WzOr371K9xuN7fffjuLFy9m9+7dvPrqq7z00ksAVf53EnECBRURcYSZM2fyt7/9jccff5xf/OIX1W4fHh4OmK82fq6oqMj7+M/t2LGDG264gc6dO/P//t//q/I1Tt0OXJtf+7zzzjtMnTqVO+64g7vvvrva12/atGmVZ12qExcXx7/+9S+Ki4sZNGgQiYmJPPjgg7zwwgsAWi9FHE9BRURsN2/ePCZNmsT//M//MHXq1Bo959RXPj9fC+XUXIsWLU6b37dvH4MGDcLtdvPxxx9X+3XKm2++yUUXXUSPHj1qVFN1Fi9ezG233cbQoUN5+eWXq9x27969fP7559x00000bNjwnF43OTmZ77//nk2bNvHFF19w4MAB+vTpA0D79u3Pad8ivqagIiK2WrhwIXfeeScjRoxg1qxZNX7eJZdcAsD69evLzR88eJD9+/d7Hz/lyJEjDBo0iOLiYhYtWlThtS0/tWbNGr799ttaO5uyZs0abrjhBnr27Mm7775b7Vdbb731FpZl1drrBwcHc8kll3D55ZfTuHFjlixZAkBKSkqt7F/EVxRURMQ2K1asYPTo0SQnJ/PGG29Ueh1IaWkpO3bsKHf2pFOnTnTo0IFXX3213Eq2s2fPxuVyceONN3rn8vPz+cUvfsGBAwf4+OOPufDCC6ut7c033wTMNR7navv27QwdOpQ2bdrw0UcfVfq11M9fPyEhgSuuuOKcX//nDh8+zJ///Ge6du2qoCKOV3WkFxHxkT179nD99dd7Q8X8+fPLPd61a1e6du0KmDtTLr74YsaMGVNumfqZM2dy/fXXM2jQIEaPHs3WrVt58cUXufPOO7n44ou9291yyy2sXbuW22+/ne3bt5dbu6Rx48YMHz683GuXlZXxzjvv0KdPH9q1a1fpe3jxxRc5duyY9w6jDz/8kP379wMwfvx43G43x48fZ/Dgwfzwww88+OCD/Pvf/y63j3bt2pGUlFRubuvWrXz11Vc89NBD3lVrfy4nJ8d7ncmXX37prScqKoqoqCjuvfde77b9+/cnKSmJCy64gMzMTF599VXy8vL46KOPavUiYRFfUFAREVukp6eTk5MDwLhx4057fNq0ad6gUplrr72WBQsWMH36dMaPH09MTAxTpkzh0UcfLbfd5s2bAXjttdd47bXXyj3WunXr04LKkiVLyMrK4uGHH67y9f/yl7+wZ88e73jBggUsWLAAgF//+te43W6OHDnCvn37AHjooYdO28eYMWNOCyqnLuKt6mzODz/8wCOPPFJu7q9//av3Pf00qPTo0YP58+dz4MABIiMjufrqq3n88cdp27Ztle9PxAkUVETE5zweD9nZ2TRo0MB7O+6VV16JVcNWY23atKl02+HDh58WNH6usmZ9lRk8eHCNaqvJfquqvTKpqamk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FxQUREpKCqtWrarwOcXFxRQXF3vHubm5Pq+z1pSdgI2vw7InoSDbzLXpZxZsi+9qb20iIiIOZGtQyc7OpqysjNjY2HLzsbGx7Nixo8LnpKamMn369Loor/ZYFny7BP4zFQ6ffF/NLoBBM6D9NVqwTUREpBKOuJj2TEyePJmcnBzvz759++wuqWpZ2+AfN8AbN5qQEt4UhsyEe1bDRUMUUkRERKpg6xmV6OhogoODycrKKjeflZVFXFxchc8JDQ0lNNQPVmQ9nnWys/E/wfKYzsa9fwf9HoDwKLurExER8Qu2nlEJCQmhR48eLF261Dvn8XhYunQpSUlJNlZ2DkoKIG0mPN8dNv7dhJSOw2HcWvNVj0KKiIhIjdl+e/LEiRMZM2YMPXv25LLLLuO5554jPz+f3/zmN3aXdmY8HtjyrulsnHvAzJ3f01wom9Db3tpERET8lO1BZdSoURw+fJhHH32UzMxMLrnkEj799NPTLrB1tN1fmM7GGZvN2J0AKdOg80hdgyIiInIObF9H5VzZuo7Kke9MZ+MdH5lxaCT0mwi974aGYXVbi4iIiB/xi3VU/FbBUUh7Gtb97cfOxj3GwpWToXGM3dWJiIjUGwoqZ+JEiQknaU9D0TEzd+EguPpxaN7B1tJERETqIwWVmrAs2P6h6Wx89Hsz17wTDJ4B7QbYW5uIiEg9pqBSnQMbYNFU2LvSjBvHwoCppjdPULC9tYmIiNRzCiqVObbP3Gq85V0zbhAOfcfD5X+A0Mb21iYiIhIgFFQq8+lDP97N0+1mGPAIuM+3tyYREZEAo6BSmQGPQPFxuHo6tOhudzUiIiIBSUGlMs07wJh/2V2FiIhIQPO77skiIiISOBRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRURERExLEUVERERMSxFFRERETEsRRUbJKRU8jK77LJyCm0uxQRERHHamB3AYHonXV7mbxgCx4LglyQOqILo3ol2F2WiIiI4+iMSh3LyCn0hhQAjwVTFmzVmRUREZEKKKjUsfTsfG9IOaXMstidXWBPQSIiIg6moFLHEqMbEeQqPxfsctEmOsKegkRERBxMQaWOxbvDSR3RhWCXSSvBLhdPjuhMvDvc5spEREScRxfT2mBUrwSS28ewO7uANtERCikiIiKVUFCxSbw7XAFFRESkGvrqR0RERBxLQUVEREQcy2dB5YknnqBv375EREQQFRVV4TZ79+5l6NChRERE0Lx5cx588EFOnDjhq5JERETEz/jsGpWSkhJuuukmkpKSmDNnzmmPl5WVMXToUOLi4li5ciUZGRncdtttNGzYkCeffNJXZYmIiIgfcVmWZVW/2dmbN28eEyZM4NixY+XmP/nkE6699loOHjxIbGwsAC+//DKTJk3i8OHDhISEVLi/4uJiiouLvePc3FxatWpFTk4OkZGRPnsfIiIiUntyc3Nxu93V/v227RqVVatW0aVLF29IARg8eDC5ubls27at0uelpqbidru9P61ataqLckVERMQGtgWVzMzMciEF8I4zMzMrfd7kyZPJycnx/uzbt8+ndYqIiIh9ziioPPTQQ7hcrip/duzY4ataAQgNDSUyMrLcj4iIiNRPZ3Qx7f3338/YsWOr3KZt27Y12ldcXBxr164tN5eVleV9TEREROSMgkpMTAwxMTG18sJJSUk88cQTHDp0iObNmwOwePFiIiMj6dixY628hoiIiPg3n92evHfvXo4ePcrevXspKytj8+bNAFxwwQU0btyYQYMG0bFjR2699VaefvppMjMzmTp1KuPGjSM0NNRXZYmIiIgf8dntyWPHjuX1118/bX7ZsmVceeWVAOzZs4e7776b5cuX06hRI8aMGcNTTz1FgwY1z085OTlERUWxb98+Xa8iIiLiJ04tL3Ls2DHcbnel2/l8HRVf279/v25RFhER8VP79u2jZcuWlT7u90HF4/Fw8OBBmjRpgsvlqtV9n0p7gXC2Ru+1/gqk96v3Wj8F0nuFwHm/lmVx/PhxWrRoQVBQ5Tch++walboSFBRUZRKrDYF0G7Tea/0VSO9X77V+CqT3CoHxfqv6yucUdU8WERERx1JQEREREcdSUKlCaGgo06ZNC4jbpfVe669Aer96r/VTIL1XCLz3Wx2/v5hWRERE6i+dURERERHHUlARERERx1JQEREREcdSUBERERHHUlARERERxwrooDJr1izatGlDWFgYvXv3Zu3atVVuP3/+fDp06EBYWBhdunTh448/rqNKz01qaiq9evWiSZMmNG/enOHDh7Nz584qnzNv3jxcLle5n7CwsDqq+Ow99thjp9XdoUOHKp/jr8cVoE2bNqe9X5fLxbhx4yrc3p+O64oVK7juuuto0aIFLpeLDz74oNzjlmXx6KOPEh8fT3h4OCkpKezatava/Z7p574uVPVeS0tLmTRpEl26dKFRo0a0aNGC2267jYMHD1a5z7P5LNSV6o7t2LFjT6v9mmuuqXa//nZsgQo/vy6Xi5kzZ1a6TycfW18I2KDyzjvvMHHiRKZNm8bGjRvp1q0bgwcP5tChQxVuv3LlSm6++WbuuOMONm3axPDhwxk+fDhbt26t48rPXFpaGuPGjWP16tUsXryY0tJSBg0aRH5+fpXPi4yMJCMjw/uzZ8+eOqr43HTq1Klc3V988UWl2/rzcQVYt25dufe6ePFiAG666aZKn+MvxzU/P59u3boxa9asCh9/+umnef7553n55ZdZs2YNjRo1YvDgwRQVFVW6zzP93NeVqt5rQUEBGzdu5JFHHmHjxo0sWLCAnTt3cv3111e73zP5LNSl6o4twDXXXFOu9rfeeqvKffrjsQXKvceMjAxee+01XC4XI0eOrHK/Tj22PmEFqMsuu8waN26cd1xWVma1aNHCSk1NrXD7X/7yl9bQoUPLzfXu3dv63e9+59M6feHQoUMWYKWlpVW6zdy5cy232113RdWSadOmWd26davx9vXpuFqWZf3hD3+w2rVrZ3k8ngof99fjCljvv/++d+zxeKy4uDhr5syZ3rljx45ZoaGh1ltvvVXpfs70c2+Hn7/Xiqxdu9YCrD179lS6zZl+FuxS0fsdM2aMNWzYsDPaT305tsOGDbMGDBhQ5Tb+cmxrS0CeUSkpKWHDhg2kpKR454KCgkhJSWHVqlUVPmfVqlXltgcYPHhwpds7WU5ODgBNmzatcru8vDxat25Nq1atGDZsGNu2bauL8s7Zrl27aNGiBW3btuWWW25h7969lW5bn45rSUkJ//znP7n99tur7CTur8f1p9LT08nMzCx37NxuN71796702J3N596pcnJycLlcREVFVbndmXwWnGb58uU0b96ciy66iLvvvpsjR45Uum19ObZZWVn8+9//5o477qh2W38+tmcqIINKdnY2ZWVlxMbGlpuPjY0lMzOzwudkZmae0fZO5fF4mDBhApdffjmdO3eudLuLLrqI1157jYULF/LPf/4Tj8dD37592b9/fx1We+Z69+7NvHnz+PTTT5k9ezbp6en069eP48ePV7h9fTmuAB988AHHjh1j7NixlW7jr8f1504dnzM5dmfzuXeioqIiJk2axM0331xlZ90z/Sw4yTXXXMPf//53li5dyp///GfS0tIYMmQIZWVlFW5fX47t66+/TpMmTRgxYkSV2/nzsT0bDewuQOrWuHHj2Lp1a7XfZyYlJZGUlOQd9+3bl4svvphXXnmFxx9/3NdlnrUhQ4Z4/3fXrl3p3bs3rVu35t13363R/0vxZ3PmzGHIkCG0aNGi0m389biKUVpayi9/+Ussy2L27NlVbuvPn4XRo0d7/3eXLl3o2rUr7dq1Y/ny5QwcONDGynzrtdde45Zbbqn2And/PrZnIyDPqERHRxMcHExWVla5+aysLOLi4ip8Tlxc3Blt70T33nsvH330EcuWLaNly5Zn9NyGDRvSvXt3vv32Wx9V5xtRUVG0b9++0rrrw3EF2LNnD0uWLOHOO+88o+f563E9dXzO5NidzefeSU6FlD179rB48eIqz6ZUpLrPgpO1bduW6OjoSmv392ML8Pnnn7Nz584z/gyDfx/bmgjIoBISEkKPHj1YunSpd87j8bB06dJy/2/zp5KSksptD7B48eJKt3cSy7K49957ef/99/nss89ITEw8432UlZWxZcsW4uPjfVCh7+Tl5fHdd99VWrc/H9efmjt3Ls2bN2fo0KFn9Dx/Pa6JiYnExcWVO3a5ubmsWbOm0mN3Np97pzgVUnbt2sWSJUto1qzZGe+jus+Ck+3fv58jR45UWrs/H9tT5syZQ48ePejWrdsZP9efj22N2H01r13efvttKzQ01Jo3b5719ddfW3fddZcVFRVlZWZmWpZlWbfeeqv10EMPebf/8ssvrQYNGlh/+ctfrO3bt1vTpk2zGjZsaG3ZssWut1Bjd999t+V2u63ly5dbGRkZ3p+CggLvNj9/v9OnT7cWLVpkfffdd9aGDRus0aNHW2FhYda2bdvseAs1dv/991vLly+30tPTrS+//NJKSUmxoqOjrUOHDlmWVb+O6yllZWVWQkKCNWnSpNMe8+fjevz4cWvTpk3Wpk2bLMB65plnrE2bNnnvdHnqqaesqKgoa+HChdZXX31lDRs2zEpMTLQKCwu9+xgwYID1wgsveMfVfe7tUtV7LSkpsa6//nqrZcuW1ubNm8t9houLi737+Pl7re6zYKeq3u/x48etBx54wFq1apWVnp5uLVmyxLr00kutCy+80CoqKvLuoz4c21NycnKsiIgIa/bs2RXuw5+OrS8EbFCxLMt64YUXrISEBCskJMS67LLLrNWrV3sf69+/vzVmzJhy27/77rtW+/btrZCQEKtTp07Wv//97zqu+OwAFf7MnTvXu83P3++ECRO8/21iY2OtX/ziF9bGjRvrvvgzNGrUKCs+Pt4KCQmxzj//fGvUqFHWt99+6328Ph3XUxYtWmQB1s6dO097zJ+P67Jlyyr8vT31fjwej/XII49YsbGxVmhoqDVw4MDT/hu0bt3amjZtWrm5qj73dqnqvaanp1f6GV62bJl3Hz9/r9V9FuxU1fstKCiwBg0aZMXExFgNGza0Wrdubf32t789LXDUh2N7yiuvvGKFh4dbx44dq3Af/nRsfcFlWZbl01M2IiIiImcpIK9REREREf+goCIiIiKOpaAiIiIijqWgIiIiIo6loCIiIiKOpaAiIiIijqWgIiIiIo6loCIiIiKOpaAiIiIijqWgIiIiIo6loCIiIiKO9f8BB62itq4oVPwAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x, y_fit, label='Fitted Line', color='red')\n",
    "x = np.arange(0, 18, 0.02).reshape(-1, 1)\n",
    "y = regr.predict(x)\n",
    "\n",
    "plt.plot(X_train, y_train, '.')\n",
    "plt.plot(x[:, 0], y)\n",
    "plt.title('线性模型拟合结果{}'.format(regr.coef_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ce4eafa9-500f-4b98-9d20-afc2103738d0",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
